class Vue {
	constructor(options) {
		this.$options = options || {}
		this.$data = options.data || {}
		this.$el = typeof options.el === 'string' ? document.querySelector(options.el) : options.el
		this._proxyData(this.$data)
		new Observer(this.$data)
		new Compiler(this)
	}

	_proxyData(data) {
		Object.keys(data).forEach(key => {
			Object.defineProperty(this, key, {
				//configrable 描述属性是否配置，以及可否删除
				//enumerable 描述属性是否会出现在for in 或者 Object.keys()的遍历中				
				enumerable: true,
				configurable: true,
				get() {
					return data[key]
				},
				set(newVal) {
					if(data[key] == newVal) {
						return
					}
					data[key] = newVal
				}
			})
		})
	}
}